package com.cw.java8.stream;

import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.DoubleStream;
import java.util.stream.Stream;

/**
 * 流式操作02
 */
public class StreamTest02 {

    public static void main(String[] args) {

        List<Integer> lists = new LinkedList<>();
        lists.add(4);
        lists.add(5);
        lists.add(1);
        lists.add(3);
        lists.add(2);
        lists.add(5);

        //1.中间操作：排序，默认从小到大排列
        lists.stream().sorted().forEach(System.out::print);
        System.out.println("升序\n---------------------");

        //中间操作：排序，从大到小排列
        lists.stream().sorted((Integer i1, Integer i2) -> {
            if (i1 > i2) {
                return -1;
            } else if (i1 < i2) {
                return 1;
            } else {
                return 0;
            }
        }).forEach(System.out :: print);
        System.out.println("降序\n---------------------");

        //2.中间操作：去重
        lists.stream().distinct().forEach(System.out :: print);
        System.out.println("去重\n---------------------");

        //3.中间操作：映射 （把list里面的数据一个一个地进行转换或者加工处理）
        lists.stream().map(i -> i * 2).forEach(System.out :: print);
        System.out.println("映射\n---------------------");

        //4.中间操作：扁平映射（把list里面的数据每一个都替换成0和1）
        lists.stream().flatMap(i -> Stream.of(0,1)).forEach(System.out :: print);
        System.out.println("扁平映射\n---------------------");

        lists.stream().mapToDouble(i -> i).forEach(System.out :: print);
        System.out.println("映射为double\n---------------------");

        lists.stream().flatMapToDouble(i -> DoubleStream.of(9)).forEach(System.out :: print);
        System.out.println("映射为扁平double\n---------------------");

        //5.中间操作：过滤
        lists.stream().filter(i -> i > 3).forEach(System.out :: print);
        System.out.println("过滤\n---------------------");

        //6.中间操作：限制
        lists.stream().limit(3).forEach(System.out :: print);
        System.out.println("限制\n---------------------");

        //7.中间操作：跳过
        lists.stream().skip(3).forEach(System.out :: print);
        System.out.println("跳过\n---------------------");

        List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
        // 将名字转换为大写
        List<String> upperCaseNames = names.stream()
                .map(String::toUpperCase)
                .collect(Collectors.toList());
        // 打印转换后的结果
        upperCaseNames.forEach(System.out::println);
    }
}
